package kr.co.bettersoft.waitnumbercustomer.fragment;

import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import kr.co.bettersoft.waitnumbercustomer.activity.DummyActivity;
import kr.co.bettersoft.waitnumbercustomer.activity.PullToRefreshListView;
import kr.co.bettersoft.waitnumbercustomer.activity.R;
import kr.co.bettersoft.waitnumbercustomer.activity.PullToRefreshListView.OnRefreshListener;
import kr.co.bettersoft.waitnumbercustomer.adapter.WaitStatusAdapter;
import kr.co.bettersoft.waitnumbercustomer.common.CommonConstant;
import kr.co.bettersoft.waitnumbercustomer.common.WaitNumberCustomerRest;
import kr.co.bettersoft.waitnumbercustomer.domain.MemberUser;
import kr.co.bettersoft.waitnumbercustomer.domain.Merchant;
import kr.co.bettersoft.waitnumbercustomer.domain.WaitStatusInfo;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.graphics.Typeface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.GridView;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

public class WaitUserListFragment extends Fragment {

	//////////////////////////////////////////////////////////////////////////////////////////////////////////
	// 변수

	// 상수
	String TAG = "WaitUserListFragment";

	public final int GET_USER_MERCHANT_INFO = 701; //  
	public final int GET_WAITING_USER_LIST = 702; //  

	// 폰트
	private Typeface typefaceNanumGothic= null; 
	private Typeface typefaceNanumGothicBold = null;
	
	SharedPreferences sharedPrefCustom;		// 설정 파일 저장소  (QR정보)
	private WaitStatusAdapter waitStatusAdapter;		// 그리드뷰 사용할 아답터

	// 서버 통신 용
	WaitNumberCustomerRest waitNumberCustomerRest;
	String callResult = "";
//	String tempstr = "";
	JSONObject jsonObject;
	int isRunning = 0;						// 중복 실행 방지

	// 데이터
	String myQRcode = "";		
	String merchantId = "";
	public List<WaitStatusInfo> entriesFn;	// 최종 조회 결과
	
	// 서버에서 받은 대기 인원 리스트 임시 저장
//	int max = 0;
//	String tmpIdWaitingUsers = "";
//	String tmpUserName = "";
//	String tmpQrCode = "";
//	String tmpPhoneNumber = "";
//	String tmpNumberWaiting = "";
//	String tmpCompanion = "";
//	String tmpAdmissionYn = "";
//	String tmpNextTurnYn = "";
//	String tmpActivateYn = "";
//	String tmpModifyDate = "";
//	String tmpRegisterDate = "";
//	Boolean tmpBackGroundOn = true;		// 백그라운드 효과 여부
	// 대기 등록한 가맹점 정보
	Merchant registeredMerchant;

	// 화면
	TextView titleBar;		// 타이틀
	View emptyView;
	GridView gridView;		// 대기인원 리스트 보여줄 그리드 뷰
	ListView listView;		// 대기인원 리스트 보여줄 그리드 뷰
	ProgressBar pb1;	// 진행바			 

	// 뒤로가기 버튼으로 닫을때 2번만에 닫히도록
	int app_end = 0;	
	DummyActivity dummyActivity = (DummyActivity)DummyActivity.dummyActivity;


	// pull down refresh
	Boolean pullDownRefreshIng  = false;

	// 프래그먼트 종료 여부. 종료된 경우 스레드 호출로 인한 에러를 방지하기 위함
	Boolean isFinished = false;

	///////////////////////////////////////////////////////////////////////////////////////////////////////////	
	// 핸들러
	Handler handler = new Handler(){
		@Override
		public void handleMessage(Message msg){
			Bundle b = msg.getData();
			try{

				// 데이터를 화면에 뿌려준다.
				if(b.getInt("showListYN")==1){	
					if(entriesFn!=null && entriesFn.size()>0){
						setGriding();
						listView.setVisibility(View.VISIBLE);
						emptyView.setVisibility(View.GONE);
					}else{
						Log.d(TAG,"no data");
						listView.setEmptyView(emptyView);
						listView.setVisibility(View.GONE);
						emptyView.setVisibility(View.VISIBLE);
					}
					isRunning = 0;
				}

				// 프로그래스바 보이기 / 숨기기
				if(b.getInt("order")==1){
					// 러닝바 실행
					pb1.setVisibility(View.VISIBLE);
				}else if(b.getInt("order")==2){
					// 러닝바 종료
					pb1.setVisibility(View.INVISIBLE);
				}

				// 경고창
				if(b.getInt("showAlert")==1){					 // 경고창 . 
					//
					new AlertDialog.Builder(returnThis())
					.setTitle(CommonConstant. alertTitle )                                        
					.setMessage(b.getString("msg"))
					.setIcon(R.drawable.ic_dialog_img)		
					.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
						public void onClick(DialogInterface dialog, int whichButton) {
							//
						}})
						.setNegativeButton("", null).show();
				}
				// 에러 토스트 
				if(b.getInt("showErrToast")==1){		// 일반 에러 토스트
					Toast.makeText(getActivity(), R.string.error_message, Toast.LENGTH_SHORT).show();
				}
				if(b.getInt("showNetErrToast")==1){		// 네트워크 에러 토스트
					Toast.makeText(getActivity(), R.string.network_error, Toast.LENGTH_SHORT).show();
				}

				switch (msg.what)
				{
				case GET_USER_MERCHANT_INFO : 
					if(getActivity()!=null) getActivity().runOnUiThread(new RunnableGetUserMerchantInfo());
//					new backgroundThreadGetUserMerchantInfo().execute();
				break;
				case GET_WAITING_USER_LIST : 
					if(getActivity()!=null) getActivity().runOnUiThread(new RunnableGetWaitingUserList());
//					new backgroundThreadGetWaitingUserList().execute();
				break;
				default : 
					break;
				}

			}catch(Exception e){
				e.printStackTrace();
			}
		}
	};

	////////////////////////////////////////////////////////////////////////////////////////////////////////	



	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
	{
		View view = inflater.inflate(R.layout.fragment_wait_user_list, null);

		//		final Button btn1 = (Button)view.findViewById(R.id.button1);
		//		btn1.setOnClickListener(new View.OnClickListener()
		//		{
		//			@Override
		//			public void onClick(View v)
		//			{
		//				btn1.setText("aaaaaaaaaa");
		//			}
		//		});

		waitNumberCustomerRest = new WaitNumberCustomerRest();

		// 프로그래스바
		pb1 = (ProgressBar) view.findViewById(R.id.wait_status_progressbar);		
		// 뷰
		titleBar = (TextView) view.findViewById(R.id.title_bar);
		emptyView = view.findViewById(R.id.empty1);
		gridView  = (GridView)view.findViewById(R.id.gridview);
		listView = (ListView) view.findViewById(R.id.list_view);
	
		// 폰트 지정.
	    typefaceNanumGothic = Typeface.createFromAsset(getActivity().getAssets(), CommonConstant.NanumGothic);  
	    typefaceNanumGothicBold = Typeface.createFromAsset(getActivity().getAssets(), CommonConstant.NanumGothicBold);
	    // 폰트 적용
	    titleBar.setTypeface(typefaceNanumGothic);		

	    

		// prefs
		sharedPrefCustom = getActivity().getSharedPreferences(CommonConstant.prefName,
				Context.MODE_WORLD_READABLE | Context.MODE_WORLD_WRITEABLE);
		myQRcode = sharedPrefCustom.getString("qrCode", "");			// 프립에서 꺼낸 내 QR코드

		// 사용자가 대기 등록한 가맹점 정보를 받아 저장할 도메인 클래스
		registeredMerchant = new Merchant();

		////////////////////////////////pull down list
		// Set a listener to be invoked when the list should be refreshed.
//		((PullToRefreshListView) getListView()).setOnRefreshListener(new OnRefreshListener() {
		((PullToRefreshListView) listView).setOnRefreshListener(new OnRefreshListener() {
			@Override
			public void onRefresh() {
				// Do work to refresh the list here.
				if(isRunning<1){								// 중복 실행 방지
					isRunning = isRunning+1;
					try {
						pullDownRefreshIng = true;				// 기본 로딩바는 보여주지 않기 위함
						new GetDataTask().execute();
					}catch (Exception e) {
						e.printStackTrace();
					} 
				}else{
					Log.w(TAG, "already running..");
					((PullToRefreshListView) listView).onRefreshComplete();
				}

			}
		});

		
		if(isRunning<1){								// 중복 실행 방지
			isRunning = isRunning+1;
			// 대기 등록 여부 확인 후 대기 리스트 조회
			handler.sendEmptyMessage(GET_USER_MERCHANT_INFO);
		}else{
			Log.w(TAG, "already running..");
		}
		
		return view;
	}

	/**
	 * setGriding
	 * 데이터를 화면에 세팅한다
	 *
	 * @param 
	 * @param 
	 * @return 
	 */
	public void setGriding(){
		waitStatusAdapter = new WaitStatusAdapter(getActivity(), entriesFn);
		listView.setAdapter(waitStatusAdapter);
	}



	//////////////////////////////////////////////////////////////////////////////////////////////////////
	//pull down list

	private class GetDataTask extends AsyncTask<Void, Void, String[]> {
		@Override
		protected String[] doInBackground(Void... params) {
			/*
			 * 방법 1. 간접 수행 ##
			 */
//			handler.sendEmptyMessage(GET_USER_MERCHANT_INFO);
			
			/*
			 * 방법 2. 직접 수행 ##
			 */
			Log.d(TAG,"GetDataTask");

			// 파라미터 세팅
			MemberUser memberUserParam = new MemberUser();
			memberUserParam.setQrCode(myQRcode);
			// 서버 메소드 호출
			if(FragmentHome.restCallCntUp()){
				if(!isFinished){
					callResult = waitNumberCustomerRest.RestGetUserMerchantInfo(memberUserParam);
				}
				FragmentHome.restCallCntDown();
				if(!isFinished){
					// 결과 처리 
					if(!(callResult.equals("F"))){				//  성공
						if(callResult.length()==0){	// 대기 등록하지 않은 상태
							showList();		// 화면에 적용한다. (대기 목록이 없으면 empty 뷰를 보여준다)
						}else{
							try {
								// 데이터 세팅..
								jsonObject = new JSONObject(callResult);
								try{
									registeredMerchant.setMerchantId(jsonObject.getString("merchantId"));
								}catch(Exception e){
									registeredMerchant.setMerchantId("");
								}
								try{
									registeredMerchant.setNumberWaiting(jsonObject.getString("numberWaiting"));
								}catch(Exception e){
									registeredMerchant.setNumberWaiting("");
								}
								try{
									registeredMerchant.setCompanyName(jsonObject.getString("companyName"));
								}catch(Exception e){
									registeredMerchant.setCompanyName("");
								}
								try{
									registeredMerchant.setWorkPhoneNumber(jsonObject.getString("workPhoneNumber"));
								}catch(Exception e){
									registeredMerchant.setWorkPhoneNumber("");
								}
								if(registeredMerchant.getMerchantId().equals("")){
									// 데이터 없음
									showList();
								}else{
									// 대기 등록한 가맹점에 대하여 비동기로 대기 목록을 가져온다.
									/*
									 * 방법 1. 간접 수행 ## 
									 */
//									handler.sendEmptyMessage(GET_WAITING_USER_LIST);
									/*
									 * 방법 2. 직접 수행 ## 
									 */
									// 파라미터 세팅
									Merchant merchantParam = new Merchant();
									merchantParam.setMerchantId(registeredMerchant.getMerchantId());
									// 서버 메소드 호출
									if(FragmentHome.restCallCntUp()){
										if(!isFinished){
											callResult = waitNumberCustomerRest.RestGetWaitingUserList(merchantParam);
										}
										FragmentHome.restCallCntDown();
										if(!isFinished){
											// 결과 처리 
											if(!(callResult.equals("F"))){				//  성공
												processWaitUserListData(callResult);
											}else{
												Log.d(TAG,"callResult::"+callResult);
												showResultDialog(getResources().getString(R.string.request_failed));
												showList();
												isRunning = 0;
											}
										}
									}
								}
							} catch (JSONException e) {
								e.printStackTrace();
								showList();
								isRunning = 0;
							} 
						}
					}else if(callResult.equals("N")){	
						showList();
						isRunning = 0;
					}else{	//  실패
						Log.d(TAG,"callResult::"+callResult);
						showResultDialog(getResources().getString(R.string.request_failed));
						isRunning = 0;
					}
				}
			}
			return null;
		}
		@Override
		protected void onPostExecute(String[] result) {
			// Call onRefreshComplete when the list has been refreshed.
			pullDownRefreshIng = false;							// 기본 로딩바 보여주기 상태 초기화. resume 기능으로는 보여지도록.
			((PullToRefreshListView) listView).onRefreshComplete();		// 리프레시가 끝났음을....
			super.onPostExecute(result);
		}
	}

	/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////	

	/**
	 * 러너블.  대기 등록한 가맹점 정보를 가져온다.
	 */
	class RunnableGetUserMerchantInfo implements Runnable {
		public void run(){
			new backgroundThreadGetUserMerchantInfo().execute();	
		}
	}
	/**
	 * backgroundThreadGetUserMerchantInfo
	 * 비동기 스레드.   대기 등록한 가맹점 정보를 가져온다.
	 * @author blue
	 *
	 */
	public class backgroundThreadGetUserMerchantInfo extends AsyncTask<Void, Void, Void>{
		@Override protected void onPostExecute(Void result) {  
			hidePb();
		} 
		@Override protected void onPreExecute() {
			showPb();
		} 
		@Override protected Void doInBackground(Void... params) {  
			Log.d(TAG,"backgroundThreadGetUserMerchantInfo");

			// 파라미터 세팅
			MemberUser memberUserParam = new MemberUser();
			memberUserParam.setQrCode(myQRcode);
			// 서버 메소드 호출
			
			if(FragmentHome.restCallCntUp()){
				if(!isFinished){
					callResult = waitNumberCustomerRest.RestGetUserMerchantInfo(memberUserParam);
				}
				FragmentHome.restCallCntDown();
				if(!isFinished){
					// 결과 처리 
					if(!(callResult.equals("F"))){				//  성공
						if(callResult.length()<1){	// 대기 등록하지 않은 상태
							showList();		// 화면에 적용한다. (대기 목록이 없으면 empty 뷰를 보여준다)
						}else{
							try {
								// 데이터 세팅..
								jsonObject = new JSONObject(callResult);
								try{
									registeredMerchant.setMerchantId(jsonObject.getString("merchantId"));
								}catch(Exception e){
									registeredMerchant.setMerchantId("");
								}
								try{
									registeredMerchant.setNumberWaiting(jsonObject.getString("numberWaiting"));
								}catch(Exception e){
									registeredMerchant.setNumberWaiting("");
								}
								try{
									registeredMerchant.setCompanyName(jsonObject.getString("companyName"));
								}catch(Exception e){
									registeredMerchant.setCompanyName("");
								}
								try{
									registeredMerchant.setWorkPhoneNumber(jsonObject.getString("workPhoneNumber"));
								}catch(Exception e){
									registeredMerchant.setWorkPhoneNumber("");
								}
								if(registeredMerchant.getMerchantId().equals("")){
									// 데이터 없음
									showList();
								}else{
									// 대기 등록한 가맹점에 대하여 비동기로 대기 목록을 가져온다.
									handler.sendEmptyMessage(GET_WAITING_USER_LIST);
								}
							} catch (JSONException e) {
								e.printStackTrace();
								showResultDialog(getResources().getString(R.string.request_failed));
								showList();
								isRunning = 0;
							} 
						}
					}else if(callResult.equals("N")){		// 없음	
						showList();
						isRunning = 0;
					}else{	//  실패
						Log.d(TAG,"callResult::"+callResult);
						showResultDialog(getResources().getString(R.string.request_failed));
						showList();
						isRunning = 0;
					}
				}
			}
			return null; 
		}
	}

	/**
	 * 러너블.  대기 중인 고객 목록 가져오는 함수 호출한다
	 */
	class RunnableGetWaitingUserList implements Runnable {
		public void run(){
			new backgroundThreadGetWaitingUserList().execute();	// * 
		}
	}
	/**
	 * backgroundThreadGetWaitingUserList
	 * 비동기 스레드.   대기 중인 고객 목록 가져오는 함수 호출한다
	 * @author blue
	 *
	 */
	public class backgroundThreadGetWaitingUserList extends AsyncTask<Void, Void, Void>{
		@Override protected void onPostExecute(Void result) { 
			hidePb();
		} 
		@Override protected void onPreExecute() {  
			showPb();
		} 
		@Override protected Void doInBackground(Void... params) {  
			Log.d(TAG,"backgroundThreadGetWaitingUserList");

			// 파라미터 세팅
			Merchant merchantParam = new Merchant();
			merchantParam.setMerchantId(registeredMerchant.getMerchantId());

			// 서버 메소드 호출
			if(FragmentHome.restCallCntUp()){
				if(!isFinished){
					callResult = waitNumberCustomerRest.RestGetWaitingUserList(merchantParam);
				}
				FragmentHome.restCallCntDown();
				if(!isFinished){
					// 결과 처리 
					if(!(callResult.equals("F"))){				//  성공
						processWaitUserListData(callResult);
					}else{
						Log.d(TAG,"callResult::"+callResult);
						showResultDialog(getResources().getString(R.string.request_failed));
						isRunning = 0;
					}
				
				}
			}
			return null; 
		}
	}

	///////////////////////////////////////////////////////////////////////////////////////////////////////

	/**
	 * 서버로부터 받은 대기 고객 리스트를 파싱하여 화면에 뿌려준다.
	 */
	public void processWaitUserListData(String callResult){
		try {
			// 데이터 세팅..
			JSONArray jsonArray = null;
			jsonArray = new JSONArray(callResult);
			int max = jsonArray.length();

			if(max>0){
				entriesFn = new ArrayList<WaitStatusInfo>(max);
				
				String tmpIdWaitingUsers = "";
				String tmpUserName = "";
				String tmpQrCode = "";
				String tmpPhoneNumber = "";
				String tmpNumberWaiting = "";
				String tmpCompanion = "";
				String tmpAdmissionYn = "";
				String tmpNextTurnYn = "";
				String tmpActivateYn = "";
				String tmpModifyDate = "";
				String tmpRegisterDate = "";
				Boolean tmpBackGroundOn = true;		// 백그라운드 효과 여부
				
				String tmpRegisterDate2 = "";	// 형식 변환해서 저장용
				int dayOfRegisterDate = 0;	// 오전 오후 분간용
				String dayOfRegisterDateStr = "";	// 다시 문자형 시간으로 변환해서 저장(2자리 유지하기 위함)
				String strAMPM = "";
				for ( int i = 0; i < max; i++ ){
					JSONObject jsonObj;
					try {
						jsonObj = jsonArray.getJSONObject(i);	
						
						try{
							tmpIdWaitingUsers =jsonObj.getString("idWaitingUsers");
						}catch(Exception e){
							tmpIdWaitingUsers = "";
						}
						try{
							tmpUserName =jsonObj.getString("userName");
						}catch(Exception e){
							tmpUserName = "";
						}
						try{
							tmpQrCode =jsonObj.getString("qrCode");
							if(tmpQrCode.equals(myQRcode)){
								tmpBackGroundOn = true;
							}else{
								tmpBackGroundOn = false;
							}
						}catch(Exception e){
							tmpQrCode = "";
						}
						try{
							tmpPhoneNumber =jsonObj.getString("phoneNumber");
						}catch(Exception e){
							tmpPhoneNumber = "";
						}
						try{
							tmpNumberWaiting =jsonObj.getString("numberWaiting");
						}catch(Exception e){
							tmpNumberWaiting = "";
						}
						try{
							tmpCompanion =jsonObj.getString("companion");
						}catch(Exception e){
							tmpCompanion = "";
						}
						try{
							tmpAdmissionYn =jsonObj.getString("admissionYn");
						}catch(Exception e){
							tmpAdmissionYn = "";
						}
						try{
							tmpNextTurnYn =jsonObj.getString("nextTurnYn");
						}catch(Exception e){
							tmpNextTurnYn = "";
						}
						try{
							tmpActivateYn =jsonObj.getString("activateYn");
						}catch(Exception e){
							tmpActivateYn = "";
						}
						try{
							tmpRegisterDate =jsonObj.getString("registerDate");
							// 길면 자르기
							if(tmpRegisterDate!=null &&(tmpRegisterDate.length()>19)){
								tmpRegisterDate = tmpRegisterDate.substring(0, 19);		// 2013-05-15 15:21:25  -> 초까지 나옴
							}
							// 오전 오후 분간하기
							dayOfRegisterDate = Integer.parseInt(tmpRegisterDate.substring(11, 13));	// dayOfRegisterDate
							if(dayOfRegisterDate>11){		// 12시 넘었을때 = 오후
								dayOfRegisterDate = dayOfRegisterDate - 12;
								strAMPM = getString(R.string.pm)+"";
							}else{				// 12시 이전 = 오전
								strAMPM = getString(R.string.am)+"";
							}
							// 두자리로 맞추기.
							dayOfRegisterDateStr = Integer.toString(dayOfRegisterDate);
							if(dayOfRegisterDate<10){		
								dayOfRegisterDateStr = "0"+dayOfRegisterDateStr;
							}
//							// 원하는 날짜 형식에 맞춰서 데이터 넣기
//							tmpRegisterDate2 = tmpRegisterDate.substring(0, 4)
//							+getString(R.string.year) +tmpRegisterDate.substring(5, 7) 
//							+ getString(R.string.month) + tmpRegisterDate.substring(8, 10) +
//							getString(R.string.day) + " " + strAMPM + " " + dayOfRegisterDateStr +
//							tmpRegisterDate.substring(13);
							
							// 원하는 날짜 형식에 맞춰서 데이터 넣기
							tmpRegisterDate2 = 
								tmpRegisterDate.substring(0, 4)+getString(R.string.year) 
								+tmpRegisterDate.substring(5, 7) + getString(R.string.month) 
								+tmpRegisterDate.substring(8, 10) + getString(R.string.day) 
								+ " " + strAMPM + " " 
								+dayOfRegisterDateStr + getString(R.string.hour) 
								+tmpRegisterDate.substring(14, 16) + getString(R.string.minute) 
								+tmpRegisterDate.substring(17, 19) + getString(R.string.seconds);
//								+tmp_registerDate.substring(13);
							tmpRegisterDate = tmpRegisterDate2;	
							
							
						}catch(Exception e){
							tmpRegisterDate2 = "";
						}
						try{
							tmpModifyDate =jsonObj.getString("modifyDate");
						}catch(Exception e){
							tmpModifyDate = "";
						}

						entriesFn.add(
								new WaitStatusInfo(
										tmpIdWaitingUsers,
										tmpUserName,
										tmpQrCode,		
										tmpPhoneNumber,
										tmpNumberWaiting,
										tmpCompanion,
										tmpAdmissionYn, 
										tmpNextTurnYn,
										tmpActivateYn,
										tmpRegisterDate2,
										tmpModifyDate,
										tmpBackGroundOn
								)
						);
					} catch (JSONException e) {
						e.printStackTrace();
					} 
				}
			}else{		// 데이터 없음.
				entriesFn = null;
			}
			new backgroundShowList().execute();		// 화면에 보여주기
		} catch (JSONException e) {
			e.printStackTrace();
		} 
		isRunning = 0;
	}

//	////////////////////////하드웨어 메뉴 버튼.  ////////////////
//
//	@Override
//	public boolean onCreateOptionsMenu(Menu menu) {
//		String tmpstr = getString(R.string.refresh);		
//		menu.add(Menu. NONE, Menu.FIRST+1, Menu.NONE, tmpstr );             // 신규등록 메뉴 추가. -- 새로고침
//		return (super .onCreateOptionsMenu(menu));
//	}
//	// 옵션 메뉴 특정 아이템 클릭시 필요한 일 처리
//	@Override
//	public boolean onOptionsItemSelected(MenuItem item){
//		return (itemCallback(item)|| super.onOptionsItemSelected(item));
//	}
//	// 아이템 아이디 값 기준 필요한 일 처리
//	public boolean itemCallback(MenuItem item){
//		switch(item.getItemId()){
//		case Menu. FIRST+1:
//			if(isRunning<1){								// 중복 실행 방지
//				isRunning = isRunning+1;
//				// 대기 등록 여부 확인 후 대기 리스트 조회
//				handler.sendEmptyMessage(GET_USER_MERCHANT_INFO);
//			}else{
//				Log.w(TAG, "already running..");
//			}
//			return true ;
//		}
//		return false;
//	}
//	///////////////////////////////////////////////////////////////////////////////////////////////////////

	//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	//유틸

	/**
	 * backgroundShowList
	 * 비동기로 화면에 데이터 보여준다
	 *
	 * @param 
	 * @param 
	 * @return 
	 */
	public class backgroundShowList extends  AsyncTask<Void, Void, Void> { 
		@Override protected void onPostExecute(Void result) {  
		} 
		@Override protected void onPreExecute() {  
		} 
		@Override protected Void doInBackground(Void... params) {  
			Log.w(TAG,"backgroundShowList");
			showList();
			return null; 
		}
	}
	/**
	 * showList
	 *  화면에 데이터 보여준다
	 *
	 * @param 
	 * @param 
	 * @return 
	 */
	public void showList(){
		Log.d(TAG, "showList");
		if(!isFinished){
			getActivity().runOnUiThread(new Runnable(){		
				@Override
				public void run(){
					Message message = handler.obtainMessage();
					Bundle b = new Bundle();
					b.putInt("showListYN", 1);		// 보여주기.
					message.setData(b);
					handler.sendMessage(message);
				}
			});
		}
	}

	/**
	 * returnThis
	 *  컨택스트를 리턴한다.(핸들러에서 필요)
	 *
	 * @param
	 * @param
	 * @return
	 */
	public Context returnThis(){
		return getActivity();
	}


	/**
	 * showPb
	 *  중앙 프로그래스바 가시화한다
	 *
	 * @param
	 * @param
	 * @return
	 */
	public void showPb(){
		if(!isFinished){
			getActivity().runOnUiThread(new Runnable(){	 
				@Override
				public void run(){
					Message message = handler.obtainMessage();
					Bundle b = new Bundle();
					b.putInt("order", 1);
					message.setData(b);
					handler.sendMessage(message);
				}
			});
		}
	}
	/**
	 * hidePb
	 *  중앙 프로그래스바 비가시화한다
	 *
	 * @param
	 * @param
	 * @return
	 */
	public void hidePb(){
		if(!isFinished){
			getActivity().runOnUiThread(new Runnable(){	
				@Override
				public void run(){
					Message message = handler.obtainMessage();
					Bundle b = new Bundle();
					b.putInt("order", 2);
					message.setData(b);
					handler.sendMessage(message);
				}
			});
		}
	}

	/**
	 * showMSG
	 *  화면에 error 토스트 띄운다
	 *
	 * @param
	 * @param
	 * @return
	 */
	public void showMSG(){			// 화면에 토스트 띄움..
		if(!isFinished){
			getActivity().runOnUiThread(new Runnable(){		 
				@Override
				public void run(){
					Message message = handler.obtainMessage();				
					Bundle b = new Bundle();
					b.putInt("showErrToast", 1);
					message.setData(b);
					handler.sendMessage(message);
				}
			});
		}
	}

	/**
	 * showResultDialog
	 *  얼럿 띄운다
	 *
	 * @param msg
	 * @param
	 * @return 
	 */
	public void showResultDialog(final String msg){
		if(!isFinished){
			getActivity().runOnUiThread(new Runnable(){		 
				@Override
				public void run(){
					Message message = handler.obtainMessage();				
					Bundle b = new Bundle();
					b.putInt("showAlert", 1);
					b.putString("msg", msg);			// 화면에 보여줄 메시지
					message.setData(b);
					handler.sendMessage(message);
				}
			});
		}
	}


	@Override
	public void onResume(){
		super.onResume();
		isFinished = false;
		FragmentHome.app_end = 0;
	}

	@Override
	public void onPause(){
		super.onPause();
		isFinished = true;
	}
}